home *** CD-ROM | disk | FTP | other *** search
/ The Way Things Work / Way Things Work, The (1994)(Dorling Kindersley).iso / dksetup / dksetup.mst < prev    next >
Text File  |  1994-08-04  |  24KB  |  867 lines

  1.  
  2. '**************************************************************************
  3. '*                       Body Setup
  4. '**************************************************************************
  5.  
  6. '$DEFINE DEBUG  ''Define for script development/debugging
  7.  
  8. '$INCLUDE 'setupapi.inc'
  9. '$INCLUDE 'msdetect.inc'
  10. '' '$INCLUDE 'msshared.inc'
  11.  
  12. '' OPTION EXPLICIT
  13.  
  14. DECLARE FUNCTION FIsVGA LIB "mscuistf.dll" AS INTEGER
  15. DECLARE FUNCTION FIs256Colour LIB "mscuistf.dll" AS INTEGER
  16.  
  17.  
  18.  
  19. ''Dialog ID's
  20. CONST WELCOME       = 100
  21. CONST CUSTOMHELP    = 106
  22. CONST SPEED         = 111
  23. CONST BILLBOARD     = 113
  24. CONST ASKQUIT       = 200
  25. CONST DESTPATH      = 300
  26. CONST EXITFAILURE   = 400
  27. CONST EXITQUIT      = 600
  28. CONST EXITSUCCESS   = 700
  29. CONST OPTIONS       = 800
  30. CONST APPHELP       = 900
  31. CONST DONENEWSYSSOFT    = 1100
  32. CONST MAILMAN           = 1500
  33. CONST DONENOSYSSOFT     = 1800
  34. CONST NEWSYSTEMSOFTWARE = 2300
  35. CONST NEWADPCM          = 2600
  36. CONST WARNNOSYSSOFT     = 3100
  37. CONST PROGMANGRP        = 3742
  38. CONST CUSTOM        = 6200
  39. CONST NOSPACE       = 6300
  40. CONST BADPATH       = 6400
  41. CONST NEED31        = 6401
  42. CONST NOMOUSE       = 6402
  43. CONST BADVGA        = 6403
  44. CONST NOT256        = 6404
  45. CONST POORMACHINE   = 6405
  46. CONST AWFULMACHINE  = 6406
  47. CONST PATHHELP      = 6407
  48. CONST WHIZZHELP     = 6408
  49. CONST URKADPCM      = 6409
  50. CONST ADPCMHELP     = 6410
  51.  
  52. ''Bitmap ID
  53. CONST LOGO = 1
  54.  
  55. GLOBAL CURSOR%      '' Old mouse cursor state
  56. GLOBAL DEST$        '' Default destination directory.
  57. GLOBAL ProdSrc$, dirCode$, dirSetup$
  58. GLOBAL SysSrc$
  59. GLOBAL SRCDIR$      '' Source Drive
  60. GLOBAL FussyUser$   '' "1" for express installation, "2" for custom.
  61. GLOBAL MINIMAL$     '' "ON" for minimal installation, "OFF" for normal
  62. GLOBAL PROGMAN$     '' "ON" for invoke program manager, "OFF" otherwise
  63. GLOBAL CUSTCHECK$   '' the state of all Custom dialogue check boxes
  64. GLOBAL PROGGRP$     '' Name of Program Manager Group
  65. GLOBAL PRODNAME$    '' Product Name
  66. GLOBAL COMPNAME$    '' Company Name
  67. GLOBAL WINSYSDIR$   '' Windows System Driver
  68. GLOBAL DESTDRIVE$   '' Destination drive
  69. GLOBAL WINDRIVE$    '' Windows drive (system directory)
  70. GLOBAL WinDir$      '' Windows directory
  71. GLOBAL DD%          '' Integer DESTDRIVE$
  72. GLOBAL WD%          '' Integer WINDRIVE$
  73. GLOBAL SizeReq&     '' Total installation size?
  74. GLOBAL NEWSYSADPCM$
  75. GLOBAL CrapLng%
  76. GLOBAL Junk&
  77. GLOBAL CUIDLL$
  78. GLOBAL HELPPROC$
  79. GLOBAL SZINF$
  80. GLOBAL OPTCUR$
  81. GLOBAL I%
  82. GLOBAL SZ$, Key$, SrcDrive$, SrcPengeDir$
  83. GLOBAL VerNew$
  84. GLOBAL VerOld$
  85. GLOBAL ADPCMCOPY%, ADPCMINIUPDATED%
  86. GLOBAL dlg%
  87. GLOBAL INI$
  88. GLOBAL INSTRINI$
  89. GLOBAL Count%, RebootMsg%, uLen%
  90. GLOBAL OLDNTH&, NEWNTH&
  91. GLOBAL OldYear%, NewYear%, OldMonth%, NewMonth%, OldDay%, NewDay%
  92. GLOBAL ExeFile$, PengeFile$, IniFile$, Section$, Moi$
  93.  
  94. DECLARE SUB Install
  95. DECLARE FUNCTION IsVersionLater (VersionOld$, VersionNew$) AS INTEGER
  96. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  97. DECLARE FUNCTION IsDateLater (DateOld$, DateNew$) AS INTEGER
  98.  
  99. '******************************************************************
  100. '** Declare the funcitons in USER.EXE we need to register a
  101. '** unique message identifier and needed to post that message
  102. '** to the NSETUP.EXE program.  See the Windows api documentation
  103. '** for additional information on these functions.
  104. '******************************************************************
  105. DECLARE FUNCTION PostMessage LIB "user" (hwnd%, msg%, wparam%, lparam&) AS INTEGER
  106. DECLARE FUNCTION RegisterWindowMessage LIB "user" (szRebootMessage$) AS INTEGER
  107.  
  108.  
  109.  
  110. INIT:
  111.     Cursor% = ShowWaitCursor ()
  112.     dirCode$ = "DKCODE"
  113.     dirSetup$ = "DKSETUP"
  114.     CUIDLL$ = "mscuistf.dll"            ''Custom user interface dll
  115.     HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  116.     PRODNAME$ = "The Way Things Work"
  117.     COMPNAME$ = "DK Multimedia"
  118.     ExeFile$ = "twtw.exe"
  119.     PengeFile$ = "twtw.png"
  120.     IniFile$ = "twtw.ini"
  121.     Section$ = "TWTW"
  122.     Moi$ = ProdName$ + " Setup"
  123.     WinSysDir$ = GetWindowsSysDir ()
  124.     WinDir$ = GetWindowsDir ()
  125.     WINDRIVE$ = MID$ (GetWindowsSysDir (), 1, 1)
  126.     INSTRINI$ = MakePath(GetWindowsDir(),IniFile$)
  127.  
  128.     SrcDir$ = GetSymbolValue ("STF_SRCDIR")
  129.     uLen% = Len (SrcDir$) - Len (dirSetup$)
  130.     ProdSrc$ = Mid$ (SrcDir$, 1, uLen% - 1) + dirCode$
  131.     SysSrc$ = SrcDir$
  132.  
  133.     SetAbout PRODNAME$, "⌐ 1994 " + COMPNAME$
  134.     CrapLng% = SetBeepingMode (1)
  135.     SetBitmap CUIDLL$, LOGO
  136.     SetTitle PRODNAME$ + " Setup"
  137.     CrapLng% = SetDecompMode (1)
  138.  
  139.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  140.  
  141.     IF szInf$ = "" THEN
  142.         szInf$ = GetSymbolValue("STF_CWDDIR") + "SETUP.INF"
  143.     END IF
  144.  
  145.     ReadInfFile szInf$
  146.  
  147.     OPTCUR$ = "1"
  148.     DEST$ = "C:\DKMM\TWTW"
  149.     MINIMAL$ = "OFF"
  150.     PROGMAN$ = "ON"
  151.  
  152. '***************************************************************
  153. '**  Here we go registering the message so we can communicate
  154. '**  with NSETUP.EXE.
  155. '***************************************************************
  156.     RebootMsg% = RegisterWindowMessage ("NSetup")
  157.  
  158.  
  159. '$IFDEF DEBUG
  160.     i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
  161.     WinDrive$ = MID$(GetWindowsDir, 1, 1)
  162.     IF IsDriveValid(WinDrive$) = 0 THEN
  163.         i% = DoMsgBox("Windows drive ('"+WinDrive$+"') is not a valid drive.", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  164.         GOTO QUIT
  165.     END IF
  166. '$ENDIF ''DEBUG
  167.  
  168.  
  169. WELCOME:
  170.     RestoreCursor (Cursor%)
  171.     sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$)
  172.     Cursor% = ShowWaitCursor ()
  173.     IF sz$ = "CONTINUE" THEN
  174.         UIPop 1
  175.     ELSE
  176.         GOSUB ASKQUIT
  177.         GOTO WELCOME
  178.     END IF
  179.  
  180. TEST31:
  181.     IF GetWindowsMajorVersion () > 3 THEN
  182.         GOTO TESTVGA
  183.     END IF
  184.  
  185.     IF GetWindowsMajorVersion () < 3 THEN
  186.         GOTO GORDONBENNETT
  187.     END IF
  188.  
  189.     IF GetWindowsMinorVersion () >= 10 THEN
  190.         GOTO TESTVGA
  191.     END IF
  192.  
  193. GORDONBENNETT:
  194.     RestoreCursor (Cursor%)
  195.     sz$ = UIStartDlg (CUIDLL$, NEED31, "FInfoDlgProc", AWFULMACHINE, HELPPROC$)
  196.     Cursor% = ShowWaitCursor ()
  197.     UIPopAll
  198.     ERROR STFQUIT
  199.  
  200.  
  201. TESTVGA:
  202.     IF GetScreenHeight () >= 480 AND GetScreenWidth () >= 640 THEN
  203.         GOTO TESTMOUSE
  204.     ELSE
  205.         RestoreCursor (Cursor%)
  206.         sz$ = UIStartDlg (CUIDLL$, BADVGA, "FInfoDlgProc", AWFULMACHINE, HELPPROC$)
  207.         Cursor% = ShowWaitCursor ()
  208.         IF sz$ = "CONTINUE" THEN
  209.             UIPop(1)
  210.             GOTO TESTMOUSE
  211.         ELSEIF sz$ = "REACTIVATE" THEN
  212.             GOTO TESTVGA
  213.         ELSEIF sz$ = "BACK" THEN
  214.             UIPop 1
  215.             GOTO WELCOME
  216.         ELSE
  217.             GOSUB ASKQUIT
  218.             GOTO TESTMOUSE
  219.         END IF
  220.     END IF
  221.  
  222. TESTMOUSE:
  223.     IF HasMouseInstalled() > 0 THEN
  224.         GOTO TESTCOLOUR
  225.     ELSE
  226.         RestoreCursor (Cursor%)
  227.         sz$ = UIStartDlg (CUIDLL$, NOMOUSE, "FInfoDlgProc", AWFULMACHINE, HELPPROC$)
  228.         Cursor% = ShowWaitCursor ()
  229.         IF sz$ = "CONTINUE" THEN
  230.             UIPop(1)
  231.             GOTO TESTCOLOUR
  232.         ELSEIF sz$ = "REACTIVATE" THEN
  233.             GOTO TESTMOUSE
  234.         ELSEIF sz$ = "BACK" THEN
  235.             UIPop 1
  236.             GOTO WELCOME
  237.         ELSE
  238.             GOSUB ASKQUIT
  239.             GOTO TESTCOLOUR
  240.         END IF
  241.     END IF
  242.  
  243. TESTCOLOUR:
  244.     IF FIs256Colour() > 0 THEN
  245.         GOTO WHIZZO
  246.     ELSE
  247.         RestoreCursor (Cursor%)
  248.         sz$ = UIStartDlg (CUIDLL$, NOT256, "FInfoDlgProc", POORMACHINE, HELPPROC$)
  249.         Cursor% = ShowWaitCursor ()
  250.         IF sz$ = "CONTINUE" THEN
  251.             UIPop(1)
  252.             GOTO WHIZZO
  253.         ELSEIF sz$ = "REACTIVATE" THEN
  254.             GOTO TESTCOLOUR
  255.         ELSEIF sz$ = "BACK" THEN
  256.             UIPop 1
  257.             GOTO WELCOME
  258.         ELSE
  259.             GOSUB ASKQUIT
  260.             GOTO WHIZZO
  261.         END IF
  262.     END IF
  263.  
  264. WHIZZO:
  265.     SetSymbolValue "RadioDefault", FussyUser$
  266. WHIZZ1:
  267.     RestoreCursor (Cursor%)
  268.     sz$ = UIStartDlg(CUIDLL$, SPEED, "FRadioDlgProc", WHIZZHELP, HELPPROC$)
  269.     Cursor% = ShowWaitCursor ()
  270.     FussyUser$ = GetSymbolValue("ButtonChecked")
  271.  
  272.     IF sz$ = "CONTINUE" THEN
  273.         UIPop(1)
  274.         GOTO FUSSPOT
  275.     ELSEIF sz$ = "REACTIVATE" THEN
  276.         GOTO WHIZZ1
  277.     ELSEIF sz$ = "BACK" THEN
  278.         UIPop 1
  279.         GOTO WELCOME
  280.     ELSE
  281.         GOSUB ASKQUIT
  282.         GOTO FUSSPOT
  283.     END IF
  284.  
  285. '' At this point, determine which device drivers need to be loaded.
  286. FUSSPOT:
  287.     IF FussyUser$ = "1" THEN
  288.         AddSectionFilesToCopyList Section$, ProdSrc$, Dest$
  289.         GOTO TESTDRIVERS
  290.     END IF
  291.  
  292. GETPATH:
  293.     SetSymbolValue "EditTextIn", DEST$
  294.     VerOld$ = Dest$
  295.     SetSymbolValue "EditFocus", "ALL"
  296. GETPATH1:
  297.     RestoreCursor (Cursor%)
  298.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", PATHHELP, HELPPROC$)
  299.     Cursor% = ShowWaitCursor ()
  300.     DEST$ = GetSymbolValue("EditTextOut")
  301.  
  302.     IF sz$ = "CONTINUE" THEN
  303.  
  304.         IF MID$ (DEST$, 2, 1) <> ":" THEN
  305.             IF MID$ (DEST$, 1, 1) <> "\" THEN
  306.                 DEST$ = WINDRIVE$ + ":\" + DEST$
  307.             ELSE
  308.                 DEST$ = WINDRIVE$ + ":" + DEST$
  309.             END IF
  310.         ELSEIF IsDriveValid (MID$ (DEST$, 1, 1)) = 0 THEN
  311.             Dest$ = VerOld$
  312.             UIPop 1
  313.             GOSUB BADPATH
  314.             GOTO GETPATH
  315.         END IF
  316.  
  317.         IF IsDirWritable(DEST$) = 0 THEN
  318.             Dest$ = VerOld$
  319.             UIPop 1
  320.             GOSUB BADPATH
  321.             GOTO GETPATH
  322.         END IF
  323.         IF DoesDirExist( DEST$ ) = 0 THEN
  324.             i% = DoMsgBox( "The specified directory does not exist.  Do you want to create the directory?", "Install Location", 8228)
  325.             IF i% = 7 THEN
  326.                 GOTO GETPATH1
  327.             END IF
  328.         END IF
  329.         UIPop 1
  330.     ELSEIF sz$ = "REACTIVATE" THEN
  331.         GOTO GETPATH1
  332.     ELSEIF sz$ = "BACK" THEN
  333.         UIPop 1
  334.         GOTO WHIZZO
  335.     ELSE
  336.         GOSUB ASKQUIT
  337.         GOTO DOCUSTOM
  338.     END IF
  339.  
  340.  
  341. DOCUSTOM:
  342.     SrcDir$ = GetSymbolValue ("STF_SRCDIR")
  343.     SetSymbolValue "CheckItemsState", ""
  344.     AddListItem "CheckItemsState", MINIMAL$
  345.     AddListItem "CheckItemsState", PROGMAN$
  346.  
  347. '' **      "DriveStatusText" - list of seven strings to initialize drive status
  348. '' **          text items (IDC_TEXT1-7) in the following sequence:
  349. '' **              dst_drive, dst_space_need, dst_space_free,
  350. '' **              win_drive, win_space_need, win_space_free,
  351. '' **              dst_path
  352. '' **          If any of the "win_" items is an empty string, its label
  353. '' **          text will be made non-visible.
  354.  
  355.     DESTDRIVE$ = MID$ (DEST$, 1, 1)
  356.     DD% = ASC (DESTDRIVE$) - ASC ("A") + 1
  357.     WD% = ASC (WINDRIVE$) - ASC ("A") + 1
  358.  
  359.  
  360. CUSTOM1:
  361.     ClearCopyList
  362.  
  363.     IF MINIMAL$ = "OFF" THEN
  364.         AddSectionFilesToCopyList Section$, ProdSrc$, Dest$
  365.     END IF
  366.  
  367.     SetSymbolValue "ExtraSpace", ""
  368.     SetSymbolValue "Needed", ""
  369.     SetSymbolValue "Cost", ""
  370.     SetSymbolValue "DriveStatusText", ""
  371.  
  372.     AddListItem "ExtraSpace", ""
  373.     AddListItem "ExtraSpace", ""
  374.     AddListItem "ExtraSpace", "2048"
  375.     Junk& = GetCopyListCost ("ExtraSpace", "Needed", "Cost")
  376.  
  377.     AddListItem "DriveStatusText", DESTDRIVE$
  378.     AddListItem "DriveStatusText", GetListItem ("Needed", DD%)
  379.     AddListItem "DriveStatusText", STR$ (GetFreeSpaceForDrive (DESTDRIVE$))
  380.  
  381.     if dd% = wd% then
  382.  
  383.         AddListItem "DriveStatusText", ""
  384.         AddListItem "DriveStatusText", ""
  385.         AddListItem "DriveStatusText", ""
  386.  
  387.     else
  388.  
  389.         AddListItem "DriveStatusText", WINDRIVE$
  390.         AddListItem "DriveStatusText", GetListItem ("Needed", WD%)
  391.         AddListItem "DriveStatusText", STR$ (GetFreeSpaceForDrive (WINDRIVE$))
  392.  
  393.     end if
  394.  
  395.     AddListItem "DriveStatusText", DEST$
  396.  
  397.     RestoreCursor (Cursor%)
  398.     sz$ = UIStartDlg(CUIDLL$, CUSTOM, "FCustInstDlgProc", CUSTOMHELP, HELPPROC$)
  399.     Cursor% = ShowWaitCursor ()
  400.  
  401.     MINIMAL$ = GetListItem ("CheckItemsState", 1)
  402.     PROGMAN$ = GetListItem ("CheckItemsState", 2)
  403.  
  404.     IF sz$ = "CONTINUE" THEN
  405.         UIPop 1
  406.     ELSEIF sz$ = "REACTIVATE" THEN
  407.         GOTO CUSTOM1
  408.     ELSEIF sz$ = "BACK" THEN
  409.         UIPop 1
  410.         GOTO GETPATH
  411.     ELSE
  412.         GOSUB ASKQUIT
  413.         GOTO GETPATH
  414.     END IF
  415.  
  416.     ClearCopyList
  417.  
  418.     IF MINIMAL$ = "OFF" THEN
  419.         AddSectionFilesToCopyList Section$, ProdSrc$, Dest$
  420.     END IF
  421.  
  422.     RemoveSymbol "Needed"
  423.     RemoveSymbol "Cost"
  424.     RemoveSymbol "ExtraSpace"
  425.  
  426. TESTDRIVERS:
  427.     AddToBillboardList CUIDLL$, MAILMAN, "MailmanDlgProc", 2500
  428.     SetCopyGaugePosition -1, 140
  429.  
  430.     ADPCMINIUPDATED% = 0
  431.  
  432.  
  433.         'Change WIN.INI and SYSTEM.INI for ACM driver and ADPCM compresser
  434.  
  435.     Key$ = GetIniKeyString (WinDir$ + "system.ini", "drivers", "WaveMapper")
  436.  
  437.     IF Key$ <> "msacm.drv" AND Key$ <> "" THEN
  438.  
  439. ADPCMINI1:
  440.         RestoreCursor (Cursor%)
  441.         sz$ = UIStartDlg(CUIDLL$, URKADPCM, "FInfoDlgProc", ADPCMHELP, HELPPROC$)
  442.         Cursor% = ShowWaitCursor ()
  443.  
  444.         IF sz$ = "REACTIVATE" THEN
  445.             GOTO ADPCMINI1
  446.         ELSEIF sz$ = "EXIT" THEN
  447.             GOSUB ASKQUIT
  448.             GOTO ADPCMINI1
  449.         ELSEIF sz$ = "BACK" THEN
  450.             UIPop 1
  451.             GOTO WHIZZO
  452.         ELSEIF SZ$ = "CANCEL" THEN
  453.             UIPop(1)
  454.             GOTO SIDTHEFIFTH
  455.         END IF
  456.         UIPop 1
  457.         ADPCMCOPY% = 1
  458.         GOTO SIDTHETHIRD
  459.  
  460.     ENDIF
  461.  
  462.     Key$ = GetIniKeyString (WinDir$ + "system.ini", "MSACM", "Install")
  463.  
  464.     IF Key$ <> "msadpcm.acm" AND Key$ <> "" THEN
  465.  
  466. ADPCMINI2:
  467.         RestoreCursor (Cursor%)
  468.         sz$ = UIStartDlg(CUIDLL$, URKADPCM, "FInfoDlgProc", ADPCMHELP, HELPPROC$)
  469.         Cursor% = ShowWaitCursor ()
  470.  
  471.         IF sz$ = "REACTIVATE" THEN
  472.             GOTO ADPCMINI2
  473.         ELSEIF sz$ = "EXIT" THEN
  474.             GOSUB ASKQUIT
  475.             GOTO ADPCMINI2
  476.         ELSEIF sz$ = "BACK" THEN
  477.             UIPop 1
  478.             GOTO WHIZZO
  479.         ELSEIF sz$ = "CANCEL" THEN
  480.             UIPOP 1
  481.             GOTO SIDTHEFIFTH
  482.         ENDIF
  483.  
  484.         UIPop 1
  485.         ADPCMCOPY% = 1
  486.         GOTO SIDTHETHIRD
  487.  
  488.     ENDIF
  489.  
  490. ADPCMCOPY:
  491.     ADPCMCOPY% = 0
  492.  
  493.     'Find out if msacm driver is installed
  494.  
  495.     IF DoesFileExist ((MakePath (WinSysDir$, "msacm.drv")), femExists) = 1 THEN
  496.  
  497.         'Is the version installed the latest version?
  498.  
  499.         VerNew$ = GetVersionOfFile (MakePath (ProdSrc$, "msacm.drv"))
  500.         VerOld$ = GetVersionOfFile (MakePath (WinSysDir$, "msacm.drv"))
  501.         ADPCMCOPY% = IsVersionLater (VerOld$, VerNew$)
  502.  
  503.     ELSE
  504.  
  505.         ADPCMCOPY% = 1
  506.  
  507.     END IF
  508.  
  509.  
  510.     'We only need to look at the msadpcm.acm file if we have not already
  511.     'installed our version of ADPCM
  512.  
  513.     IF ADPCMCOPY% = 0 THEN
  514.  
  515.         'Find out if msadpcm.acm is installed
  516.  
  517.         IF DoesFileExist ((MakePath (WinSysDir$, "msadpcm.acm")), femExists) = 1 THEN
  518.  
  519.             'Is the version installed the latest version?
  520.  
  521.             VerNew$ = GetVersionOfFile (MakePath (ProdSrc$, "msadpcm.acm"))
  522.             VerOld$ = GetVersionOfFile (MakePath (WinSysDir$, "msadpcm.acm"))
  523.             ADPCMCOPY% = IsVersionLater (VerOld$, VerNew$)
  524.  
  525.         ELSE
  526.  
  527.             ADPCMCOPY% = 1
  528.  
  529.         END IF
  530.  
  531.     END IF
  532.  
  533. SIDTHETHIRD:
  534.     IF ADPCMCOPY% = 1 THEN
  535.  
  536. ADPCM1:
  537.  
  538.         RestoreCursor (Cursor%)
  539.         sz$ = UIStartDlg(CUIDLL$, NEWSYSTEMSOFTWARE, "FInfoDlgProc", NEWADPCM, HELPPROC$)
  540.         Cursor% = ShowWaitCursor ()
  541.  
  542.         IF sz$ = "CONTINUE" THEN
  543.             UIPop(1)
  544.             AddSpecialFileToCopyList "ACM Drivers", "MSACM", ProdSrc$, MakePath (WinSysDir$, "msacm.drv")
  545.             AddSpecialFileToCopyList "ACM Drivers", "MSADPCM", ProdSrc$, MakePath (WinSysDir$, "msadpcm.acm")
  546.             CreateIniKeyValue WinDir$ + "system.ini", "drivers", "WaveMapper", "msacm.drv", cmoOverwrite
  547.             CreateIniKeyValue WinDir$ + "system.ini", "MSACM", "Install", "msadpcm.acm", cmoOverwrite
  548.             CreateIniKeyValue WinDir$ + "control.ini", "drivers.desc", "msacm.drv","MS Audio Compression Manager", cmoOverwrite
  549.             CreateIniKeyValue WinDir$ + "control.ini", "Userinstallable.drivers", "WaveMapper", "msacm.drv", cmoOverwrite
  550.             CreateIniKeyValue WinDir$ + "control.ini", "related.desc", "WaveMapper", "", cmoOverwrite
  551.             ADPCMINIUPDATED% = 1
  552.             GOTO SIDTHEFOURTH
  553.         ELSEIF sz$ = "EXIT" THEN
  554.             GOSUB ASKQUIT
  555.             GOTO ADPCM1
  556.         ELSEIF sz$ = "REACTIVATE" THEN
  557.             GOTO ADPCM1
  558.         ELSEIF sz$ = "BACK" THEN
  559.             UIPop 1
  560.             GOTO WHIZZO
  561.         ELSE
  562.             GOSUB ASKQUIT
  563.         END IF
  564.  
  565. NOSYSSOFT:
  566.         RestoreCursor (Cursor%)
  567.         sz$ = UIStartDlg(CUIDLL$, WARNNOSYSSOFT, "FInfoDlgProc", 0, "")
  568.         Cursor% = ShowWaitCursor ()
  569.  
  570.         IF sz$ = "CONTINUE" THEN
  571.             UIPop(1)
  572.             GOTO SIDTHEFOURTH
  573.         ELSEIF sz$ = "EXIT" THEN
  574.             GOSUB ASKQUIT
  575.             GOTO NOSYSSOFT
  576.         ELSEIF sz$ = "REACTIVATE" THEN
  577.             GOTO NOSYSSOFT
  578.         ELSEIF sz$ = "BACK" THEN
  579.             UIPop 1
  580.             GOTO ADPCM1
  581.         ELSE
  582.             GOSUB ASKQUIT
  583.         END IF
  584.  
  585. SIDTHEFOURTH:
  586.         UIPop 1
  587.  
  588. SIDTHEFIFTH:
  589.  
  590.     END IF
  591.  
  592.     Install
  593.  
  594.  
  595. QUIT:
  596.     ON ERROR GOTO ERRQUIT
  597.  
  598.     IF ERR = 0 THEN
  599.         dlg% = EXITSUCCESS
  600.     ELSEIF ERR = STFQUIT THEN
  601.         dlg% = EXITQUIT
  602.         GOTO QUITL1
  603.     ELSE
  604.         dlg% = EXITFAILURE
  605.         GOTO QUITL1
  606.     END IF
  607.  
  608. QUITL3:
  609.     IF ADPCMINIUPDATED% = 1 THEN
  610.         dlg% = DONENEWSYSSOFT
  611.     ELSE
  612.         dlg% = DONENOSYSSOFT
  613.     END IF
  614.  
  615.     RestoreCursor (Cursor%)
  616.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfoDlgProc", 0, "")
  617.     Cursor% = ShowWaitCursor ()
  618.  
  619.     IF sz$ = "REACTIVATE" THEN
  620.         GOTO QUITL3
  621.     ELSEIF sz$ = "CONTINUE" THEN
  622.         IF MINIMAL$ = "OFF" THEN
  623.             RUN "NOTEPAD.EXE" + " " + MakePath(DEST$,"README.TXT"), NOWAIT
  624.         ELSE
  625.             RUN "NOTEPAD.EXE" + " " + MakePath(SRCDIR$,"..\" + dirCode$ + "\README.TXT"), NOWAIT
  626.         END IF
  627.         GOTO QUITL3
  628.     ELSEIF sz$ = "BACK" THEN
  629.         SetRestartDir DEST$
  630.         i% = PostMessage (65535, RebootMsg%, 0, 0)
  631.     ELSEIF sz$ = "EXIT" THEN
  632.         IF ADPCMINIUPDATED% = 1 THEN
  633.             i% = DoMsgBox( "The new system configuration will not be loaded until Windows is restarted.", Moi$, MB_OK+MB_TASKMODAL+MB_ICONHAND)
  634.         END IF
  635.     END IF
  636.     UIPop 1
  637.  
  638.     STOP
  639.     END
  640.  
  641.  
  642. QUITL1:
  643.     RestoreCursor (Cursor%)
  644.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  645.     Cursor% = ShowWaitCursor ()
  646.     IF sz$ = "REACTIVATE" THEN
  647.         GOTO QUITL1
  648.     END IF
  649.     UIPop 1
  650.  
  651.     STOP
  652.     END
  653.  
  654. ERRQUIT:
  655.     i% = DoMsgBox("The setup sources were corrupted. You may be able to correct the problem by using SCANDISK to fix your hard disk.", Moi$, MB_OK+MB_TASKMODAL+MB_ICONHAND)
  656.     END
  657.  
  658.  
  659.  
  660. BADPATH:
  661.     RestoreCursor (Cursor%)
  662.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  663.     Cursor% = ShowWaitCursor ()
  664.  
  665.     IF sz$ = "REACTIVATE" THEN
  666.         GOTO BADPATH
  667.     END IF
  668.     UIPop 1
  669.     RETURN
  670.  
  671.  
  672.  
  673. ASKQUIT:
  674.     RestoreCursor (Cursor%)
  675.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  676.     Cursor% = ShowWaitCursor ()
  677.  
  678.     IF sz$ = "EXIT" THEN
  679.         UIPopAll
  680.         ERROR STFQUIT
  681.     ELSEIF sz$ = "REACTIVATE" THEN
  682.         GOTO ASKQUIT
  683.     ELSE
  684.         UIPop 1
  685.     END IF
  686.     RETURN
  687.  
  688.  
  689.  
  690. '**
  691. '** Purpose:
  692. '**     Builds the copy list and performs all installation operations.
  693. '** Arguments:
  694. '**     none.
  695. '** Returns:
  696. '**     none.
  697. '*************************************************************************
  698. SUB Install STATIC
  699.  
  700.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  701.     CreateDir DEST$, cmoNone
  702.  
  703.     OpenLogFile MakePath(DEST$, "SETUP.LOG"), 0
  704.     WriteToLogFile ""
  705.     WriteToLogFile "  User chose as destination directory: '" + DEST$ + "'"
  706.     WriteToLogFile "  User chose option: '" + OPTCUR$ + "'"
  707.     WriteToLogFile ""
  708.     WriteToLogFile "May have had to create the directory: " + DEST$
  709.     WriteToLogFile ""
  710.  
  711.     CopyFilesInCopyList
  712.  
  713.     SrcDrive$ = MID$(SrcDir$, 1, 1)
  714.     uLen% = LEN (SrcDir$) - Len (dirSetup$) - 1
  715.     SrcPengeDir$ = MID$(SrcDir$, 1, uLen%-1)
  716.  
  717.     if DoesIniSectionExist (INSTRINI$, "Directory") = 1 then
  718.  
  719.         RemoveIniSection INSTRINI$, "Directory", cmoNone
  720.  
  721.     end if
  722.  
  723.     CreateIniKeyValue INSTRINI$, "Directory", "Data", SrcPengeDir$, cmoOverwrite
  724.  
  725.         IF PROGMAN$ = "ON" THEN
  726.  
  727.         PROGGRP$ = COMPNAME$
  728.  
  729.         WriteToLogFile ""
  730.         WriteToLogFile "Updating Program Manager."
  731.         WriteToLogFile ""
  732.         CreateProgmanGroup PROGGRP$, "", cmoNone
  733.         ShowProgmanGroup   PROGGRP$, 1, cmoNone
  734.         sz$ = ProdName$ + " Read Me"
  735.  
  736.         IF MINIMAL$ = "ON" THEN
  737.  
  738.             szInf$ = MakePath (SrcDir$,"..\" + dirCode$ + "\" + ExeFile$ + " ")+MakePath(SrcDir$,"..\" + dirCode$ + "\" + PengeFile$)
  739.             CreateProgmanItem PROGGRP$, PRODNAME$, szInf$, szInf$, cmoOverwrite
  740.             CreateProgmanItem PROGGRP$, sz$, "notepad.exe "+MakePath(SrcDir$,"..\" + dirCode$ + "\readme.txt"), "", cmoOverwrite
  741.  
  742.         ELSE
  743.  
  744.             szInf$ = MakePath(DEST$,ExeFile$ + " ")+MakePath(DEST$,PengeFile$)
  745.             CreateProgmanItem PROGGRP$, PRODNAME$, szInf$, szInf$, cmoOverwrite
  746.             CreateProgmanItem PROGGRP$, sz$, "notepad.exe "+MakePath(DEST$,"readme.txt"), "", cmoOverwrite
  747.  
  748.         END IF
  749.  
  750.     END IF
  751.  
  752.     WriteToLogFile ""
  753.     WriteToLogFile "Installation complete"
  754.     WriteToLogFile ""
  755.     CloseLogFile
  756.     Kill MakePath(DEST$, "SETUP.LOG")
  757.  
  758. END SUB
  759.  
  760. FUNCTION IsVersionLater (VersionOld$, VersionNew$) STATIC AS INTEGER
  761.  
  762.     IsVersionLater = 0
  763.  
  764.     FOR Count% = 1 TO 4
  765.  
  766.        OldNth& = GetVersionNthField (VersionOld$, Count%)
  767.        NewNth& = GetVersionNthField (VersionNew$, Count%)
  768.  
  769.         IF OldNth& > NewNth& THEN
  770.  
  771.             EXIT FOR
  772.  
  773.         END IF
  774.  
  775.         IF NewNth& > OldNth& THEN
  776.  
  777.             IsVersionLater = 1
  778.             EXIT FOR
  779.  
  780.         END IF
  781.  
  782.     NEXT Count%
  783.  
  784. END FUNCTION
  785.  
  786. '*************************************************************************
  787. '**
  788. '** IsDateLater
  789. '** --------
  790. '** Purpose:
  791. '**     Compares two file dates
  792. '** Arguments:
  793. '**     DateOld$ in YYYY-MM-DD-HH-MM-SS format
  794. '**     DateNew$ in YYYY-MM-DD-HH-MM-SS format
  795. '** Returns:
  796. '**     1 if new date is later, 0 if new date is older or the same
  797. '*************************************************************************
  798. FUNCTION IsDateLater (DateOld$, DateNew$) STATIC AS INTEGER
  799.  
  800.     'First compare year
  801.  
  802.     OldYear% = GetYearFromDate (DateOld$)
  803.     NewYear% = GetYearFromDate (DateNew$)
  804.  
  805.     IF NewYear% < OldYear% THEN
  806.         IsDateLater = 0
  807.  
  808.     ELSEIF NewYear% = OldYear% THEN
  809.  
  810.         'If year is the same, compare month
  811.  
  812.         OldMonth% = GetMonthFromDate (DateOld$)
  813.         NewMonth% = GetMonthFromDate (DateNew$)
  814.  
  815.         IF NewMonth% < OldMonth% THEN
  816.             IsDateLater = 0
  817.  
  818.         ELSEIF NewMonth% = OldMonth% THEN
  819.  
  820.             'If month is the same, compare day
  821.  
  822.             OldDay% = GetDayFromDate (DateOld$)
  823.             NewDay% = GetDayFromDate (DateNew$)
  824.  
  825.             IF NewDay% <= OldDay% THEN
  826.                 IsDateLater = 0
  827.             ELSE
  828.                 IsDateLater = 1
  829.             END IF
  830.  
  831.         ELSE
  832.             IsDateLater = 1
  833.         END IF
  834.  
  835.     ELSE
  836.         IsDateLater = 1
  837.     ENDIF
  838.  
  839. END FUNCTION
  840.  
  841.  
  842.  
  843.  
  844. '**
  845. '** Purpose:
  846. '**     Appends a file name to the end of a directory path,
  847. '**     inserting a backslash character as needed.
  848. '** Arguments:
  849. '**     szDir$  - full directory path (with optional ending "\")
  850. '**     szFile$ - filename to append to directory
  851. '** Returns:
  852. '**     Resulting fully qualified path name.
  853. '*************************************************************************
  854. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  855.     IF szDir$ = "" THEN
  856.         MakePath = szFile$
  857.     ELSEIF szFile$ = "" THEN
  858.         MakePath = szDir$
  859.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  860.         MakePath = szDir$ + szFile$
  861.     ELSE
  862.         MakePath = szDir$ + "\" + szFile$
  863.     END IF
  864. END FUNCTION
  865.  
  866.  
  867.